package org.example4;


import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.EncryptionMethod;

/**
 * @author shichunyue
 * @date 2025-10-30 18:39
 * 演示:用zip4j生成一个带加密密码的zip文件
 */
public class ZipWithPassword {
    public static void main(String[] args) {
        // 要压缩的文件或文件夹路径
        String property = System.getProperty("user.dir");
        System.out.println(property);
        String sourcePath = property + "/input.txt";
        System.out.println("压缩的文件来自于:"+sourcePath);
        // 输出的ZIP文件路径
        String outputZipPath = "encrypted.zip";
        // 解压时需要的密码
        String password = "Scy2018@";

        try {
            // 1. 创建ZipFile对象，并指定输出路径和密码
            ZipFile zipFile = new ZipFile(outputZipPath, password.toCharArray());

            // 2. 配置压缩和加密参数
            ZipParameters parameters = new ZipParameters();
            parameters.setEncryptFiles(true); // 启用加密
            // 使用AES加密算法，这是目前更强壮和推荐的方式[1,7](@ref)
            parameters.setEncryptionMethod(EncryptionMethod.AES);
            // 设置AES密钥强度为256位[1](@ref)
            // parameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256); // 默认即为256位，可省略

            // 3. 根据目标是文件还是目录进行压缩
            java.io.File sourceFile = new java.io.File(sourcePath);
            if (sourceFile.isDirectory()) {
                zipFile.addFolder(sourceFile, parameters);
            } else {
                zipFile.addFile(sourceFile, parameters);
            }

            System.out.println("加密ZIP文件创建成功: " + outputZipPath);

        } catch (Exception e) {
            System.err.println("压缩加密过程中出现错误: " + e.getMessage());
            e.printStackTrace();
        }
    }
}